// <![CDATA[
$.ajaxSetup({
  statusCode: {
        401: function() {
            window.location.href = '/';
        }
    }
});

$(document).ready(function() {
    
    //подсказки ко всем элементам
    $('.has-tooltip').tooltip({
        placement: "bottom",
        delay: { "show": 500, "hide": 50 },
        template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
    });
    
    /** функции пользователей **/
    
    //Создание пользователя. Отправка данных
    $('div#modalAddUser').on('submit','form#formAddUser',function(event){
        event.preventDefault();
        var form = $(event.target);
        
        $.ajax({
            url: '/admin/ajax/add_user/',
            data: form.serialize(),
            success: function(data){
                if(data.code === 200){
                    form[0].reset();
                    window.location.reload();
                }else{
                    growl_danger('Ошибка','Не удалось создать пользователя.');
                }
            }, 
            error: function(jqXHR, textStatus, errorThrown){
                growl_danger('Ошибка','Не удалось создать пользователя.<br>'+textStatus);
            },
            complete: function(){
                $('div#modalAddUser').modal('hide');
            }
        });
    });
    
    //Диалог редактирования пользовательских данных
    $('#modalEditUser').on('show.bs.modal', function (event) {
        var btn = $(event.relatedTarget); // Button that triggered the modal
        
        var user_id = btn.parent('td').data('userid');
        var row = btn.parents('tr');
        
        var modal = $(this);
        modal.find('input#userID').val(user_id);
        modal.find('input#userLogin').val(row.find('td:eq(1)').text());
        modal.find('input#userDescription').val(row.find('td:eq(6)').text());
        
        modal.find('select#userDomain').val(row.find('td:eq(4)').data('domainval'));
        modal.find('select#userRole').val(row.find('td:eq(5)').data('roleid'));
    });
    
    //Редактирование пользователя. Отправка данных
    $('div#modalEditUser').on('submit','form#formEditUser',function(event){
        event.preventDefault();
        var form = $(event.target);
        
        $.ajax({
            url: '/admin/ajax/upd_user/',
            data: form.serialize(),
            success: function(data){
                if(data.code === 200){
                    window.location.reload();
                }else{
                    growl_danger('Ошибка','Не удалось сохранить данные.');
                    console.log(data);
                }
            }, 
            error: function(jqXHR,textStatus, errorThrown){
                growl_danger('Ошибка','Не удалось сохранить данные.<br>'+textStatus);
            },
            complete: function(){
                $('div#modalEditUser').modal('hide');
            }
        });
    });
    
    //Алерт на удаление пользователя
    $('#modalDelUser').on('show.bs.modal', function (event) {
        var btn = $(event.relatedTarget); // Button that triggered the modal
        var user_id = btn.parent('td').data('userid');
        var row = btn.parents('tr');
        var user_name = row.find('td:eq(1)').text();
        var modal = $(this);
        modal.find('input#userID').val(user_id);
        modal.find('strong#userName').text(user_name);
    });
    
    //Удаление пользователя. Отправка данных
    $('div#modalDelUser').on('submit','form#formDelUser',function(event){
        event.preventDefault();
        var form = $(event.target);
        
        $.ajax({
            url: '/admin/ajax/delete_user/',
            data: form.serialize(),
            success: function(data){
                if(data.code === 200){
//                    console.log(data);
                    window.location.reload();
                }else{
                    growl_danger('Ошибка','Не удалось сохранить данные.<br>'+data.msg);
                    console.log(data);
                }
            }, 
            error: function(jqXHR,textStatus, errorThrown){
                growl_danger('Ошибка','Не удалось сохранить данные.<br>'+textStatus);
            },
            complete: function(){
                $('div#modalEditUser').modal('hide');
            }
        });
    });
    
    //Диалог редактирования файла с паролями
    $('#modalFilePwd').on('show.bs.modal', function () {
        var modal = $(this);
        $.ajax({
            url:'/admin/ajax/get_file_users',
            success: function(data){
                modal.find('#filePwd').val(data);
            }
        });
    });
    
    $('div#modalFilePwd').on('submit','form#formFilePwd',function(e){
        e.preventDefault();
        var form = $(e.target);
        
        $.ajax({
            //dataType: 'json',
            type: "POST",
            url: '/admin/ajax/save_file_users/',
            data: form.serialize(),
            success: function (data) {
                if(data.code === 200){
                    growl_success('Выполнено',data.msg);
                }else{
                    growl_danger('Ошибка','Не удалось сохранить данные.<br>'+data.msg);
                }
            },
            error: function (xhr) {
                growl_danger('Ошибка','Не удалось сохранить данные.<br>'+xhr.responseText);
            },
            complete: function () {
                form[0].reset();
                $('div#modalFilePwd').modal('hide');
            }
        });
    });
    
    //Generate MD5 hash
    $('div#modalFilePwd').on('keyup','#genMD5',function(e){
        clearTimeout($.data(this, 'timer'));
        var wait = setTimeout(get_md5, 350, $(this).val());
        $(this).data('timer', wait);
    });

    get_md5 = function (str){
        $.ajax({
            url:'/admin/ajax/get_md5/'+str,
            success: function(data){
                $('div#modalFilePwd #inputMD5').val(data.msg);
            }
        });
    };
    
    /** секция пользовательских ролей **/
    
    //создание роли - отправка данных
    $('div#modalAddRole').on('submit','form#formAddRole',function(e){
        e.preventDefault();
        
        var form = $(e.target);
        
        $.ajax({
            url: '/admin/ajax/add_role/',
            data: form.serialize(),
            success: function (data) {
                if(data.code === 200){
                    form[0].reset();
//                    console.log(data);
                    window.location.reload();
                }else{
                    growl_danger('Ошибка','Не удалось добавить запись.');
                }
            },
            error: function (xhr) {
                growl_danger('Ошибка','Не удалось добавить запись.<br>'+xhr.responseText);
            },
            complete: function () {
                $('div#modalAddRole').modal('hide');
            }
        });
    });
    
    //Алерт на удаление Роли
    $('#modalDelRole').on('show.bs.modal', function (event) {
        var btn = $(event.relatedTarget); // Button that triggered the modal
        var role_id = btn.parent('td').data('roleid');
        var row = btn.parents('tr');
        var modal = $(this);
        var role_name = row.find('td:eq(1)').text();
        modal.find('input#roleID').val(role_id);
        modal.find('strong#roleName').text(role_name);
    });
    
    //удаление роли
    $('#modalDelRole').on('submit', 'form#formDelRole', function(e){
        e.preventDefault();
        var form = $(e.target);
        
        $.ajax({
            url: '/admin/ajax/delete_role/',
            data: form.serialize(),
            success: function(data){
                if(data.code === 200){
//                    console.log(data);
                    window.location.reload();
                }else{
                    growl_danger('Ошибка','Не удалось сохранить данные.<br>'+data.msg);
                    console.log(data);
                }
            }, 
            error: function(xhr){
                growl_danger('Ошибка','Не удалось сохранить данные.<br>'+xhr.responseText);
            },
            complete: function(){
                $('div#modalDelRole').modal('hide');
            }
        });
    });
    
    //Диалог редактирования Ролей (Прав)
    $('#modalEditRole').on('show.bs.modal', function (event) {
        var btn = $(event.relatedTarget); // Button that triggered the modal
        
        var role_id = btn.parent('td').data('roleid');
        var row = btn.parents('tr');
        
        var modal = $(this);
        modal.find('input#roleID').val(role_id);
        modal.find('input#roleName').val(row.find('td:eq(1)').text());
        modal.find('input#roleDescription').val(row.find('td:eq(2)').text());
        modal.find('input#startDate').val(row.find('td:eq(4)').data('startdate'));
        modal.find('input#endDate').val(row.find('td:eq(4)').data('enddate'));
        
        modal.find('div#roleTree input:checkbox').removeAttr('checked');
        
        
        var ol_list = $(row.find('td:eq(3)').html());
        
        var multiselect = modal.find('select#roleListPerms');
        multiselect.html('');
        
        ol_list.children('li').each(function(indx, element){
            var option = $('<option/>').attr('value',$(element).data('hash')).text($(element).text());
            multiselect.append(option); //.attr('value',hash).text($(element).text());
            
            var leaf = modal.find('div#roleTree li#' + $(element).data('hash'));
            leaf.find('input:checkbox:first').prop('checked',true);
        });
    });
    
    //удаление узла из списка
    $('#modalEditRole').on('dblclick','select#roleListPerms option',function(event){
        var option = $(event.target);
        var hash = option.attr('value');
        
        option.remove();
        
        var chekb = $('div#roleTree').find('li#'+hash).find('input:checkbox:first');
        chekb.prop('checked',false);
//        console.log(chekb);
    });
    
    //добавление/удаление узла в список
    $('#modalEditRole').on('change','input.checknode',function(event){
        var chekb = $(event.target);
        var li = chekb.parents('li:first');
        if(chekb.prop('checked')){
            add_rolelist(li.attr('id'), li.data('titlefull'));
        }else{
            remove_rolelist(li.attr('id'));
        }
        
    });
    
    //добавление узла в список по ссылке
    $('#modalEditRole').on('click','li.dir > a',function(event){
        event.preventDefault(); // отменяем стандартную отправку
        var ahref = $(event.target);
        var li = ahref.parents('li:first');
        var checkb = li.find('input:checkbox:first');
        if(checkb.prop('checked')){
            checkb.prop('checked', false);
            remove_rolelist(li.attr('id'));
        }else{
            checkb.prop('checked', true);
            add_rolelist(li.attr('id'), li.data('titlefull'));
        }
        
    });
    
    //функция добавление узла в список
    var add_rolelist = function(hash, title){
        var option = $('<option/>').attr('value',hash).text(title);
        var multiselect = $('#modalEditRole').find('select#roleListPerms');
        multiselect.append(option);
//        console.log(option);
    };
    
    //фунция удаления из списка
    var remove_rolelist = function(hash){
        var multi = $('#modalEditRole').find('select#roleListPerms');
        var option = multi.find('option[value='+hash+']');
        option.remove();
//        console.log(option);
    };
    
    //очистить все
    $('#modalEditRole').on('click','#btnRoleClear',function(e){
//        console.log('clear all');
        clearAllRole();
    });
    
    function clearAllRole(){
        var modal = $('#modalEditRole');
        
        modal.find('input:checkbox').prop('checked', false);
        modal.find('select#roleListPerms').find('option').remove();
    };
    
    //установить root в качестве прав
    $('#modalEditRole').on('click','#btnSetRoot',function(e){
        clearAllRole();
        add_rolelist('0','root');
    });
    
    //редактирование роли, отправка данных на сервер
    $('#modalEditRole').on('submit','#formEditRole',function(e){
        e.preventDefault();
        var form = $(this);
        var select = form.find('select#roleListPerms');
        var role_keys = [];
        select.children('option').each(function(index, element){
            role_keys.push($(element).val());
        });
        
        $.ajax({
            url: '/admin/ajax/upd_role/',
            method: 'post',
            data: form.serialize() + '&roleKeys='+role_keys.join(';'),
            success: function(data){
                if(data.code === 200){
                    window.location.reload();
                }else{
                    growl_danger('Ошибка','Не удалось сохранить данные.<br>'+data.msg);
                }
                console.log(data);
            }, 
            error: function(xhr){
                growl_danger('Ошибка','Не удалось сохранить данные.<br>'+xhr.responseText);
            },
            complete: function(){
                $('div#modalEditRole').modal('hide');
            }
        }); //*/
    });
    
    //календарики
    $('input[id $= Date]').datepicker({
//    $('input[type = date]').datepicker({
        firstDay: 1,
        changeYear: true,
        changeMonth: true,
        minDate: new Date(2004, 0, 1),
        maxDate: '+1m' ,
        dateFormat: 'dd.mm.yy',
        dayNames: [ 'Воскресенье','Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],
        dayNamesMin: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],
        monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
        monthNamesShort: ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
//        monthNamesShort: ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'],
        showAnim: 'fold'
    });
    
    
    /** ***************** **/
    //обновление структуры
    $('#modalUpdProcess').on('show.bs.modal', function (event) {
        var modal = $(this);
        var progressbar = modal.find('[role = progressbar]');
        setValProgressbar(progressbar, 0);
        $.ajax({
            url: '/admin/ajax/start_update_db/',
            success: function(data){
                if(data.code === 200){
                    var timert = window.setInterval(update_progress_db, 1500);
                    modal.data('timerUpd', timert);
                }else{
                    modal.modal('hide');
                    growl_danger('Ошибка','Не удалось запустить обновление.<br>'+data.msg);
                }
                console.log(data);
            }, 
            error: function(xhr){
                modal.modal('hide');
                growl_danger('Ошибка','Не удалось запустить обновление.<br>'+xhr.responseText);
            },
            complete: function(){
            }
        }); //*/
        
    });
    
    var setValProgressbar = function (progressbar, newvalue){
        progressbar.attr('style','width: '+newvalue+'%');
        progressbar.attr('aria-valuenow', newvalue);
        var progresscapture = progressbar.find('span');
        progresscapture.text(newvalue + "%");
//        console.log(progresscapture);
    };
    
    update_progress_db = function(){
        var modal = $('#modalUpdProcess');
        $.ajax({
            url:'/admin/ajax/get_status_update_db/',
            success: function(data){
                var progBar = modal.find('[role = progressbar]');
                if(data.code === 200){
                    setValProgressbar(progBar, data.msg); //eval(data.msg)
                    if(data.msg >= 100){
                        window.clearInterval(modal.data('timerUpd'));
                        setTimeout(function(){
                            modal.modal('hide');
                            modal.modal('hide');
                        }, 1000);
                    }
                }else{
                    window.clearInterval(modal.data('timerUpd'));
                    modal.modal('hide');
                    growl_danger('Ошибка','Обновление прервано.<br>'+data.msg);
                }
            },
            error: function(){
                modal.modal('hide');
                growl_danger('Ошибка','Обновление прервано.<br>'+data.msg);
            }
        });
    };
    
    /** ***************** **/
    var ajax_loader_img = '/assets/js/ajax-loader.gif';
    var folder_img      = '/images/folder.gif';
    var folder_open_img = '/images/folder-open.gif';
//    var file_img        = '/images/star-small.gif';
    
    
    //перемещение по дереву
    $('div#modalEditRole #roleTree').on('click', 'img.folder', function (e) {

        var img = $(e.target),
                li = img.parent('li'),
                id = li.attr('id');

        if (!li.hasClass('loaded')) {
            $.ajax({
                url: '/admin/ajax/get_tree_child/' + id,
                beforeSend: function () {
//                     li.addClass('loading');
                    img.attr('src', ajax_loader_img);
                },
                success: function (data) {
                    img.attr('src', folder_open_img);
                    li.append(data).addClass('loaded');
                    li.children("ul").slideToggle('fast');

                    if (0 < li.find("li.file:first").length && 0 < li.find("li.dir:first").length) {
                        li.children("a").attr("rel", "1");
                    }

                    setTimeout(change_node, 500, id, 1);

                    var multiselect = $('div#modalEditRole select#roleListPerms');
                    multiselect.find('option').each(function(index, elem){
                        li.find('li#'+$(elem).val()+' input:checkbox:first').prop('checked',true);
                    });
                }
            });
        } else {
            var status;
            if(li.children("ul").is(':visible')){
                img.attr('src',folder_img);
                status = 0;
            }else{
                img.attr('src',folder_open_img); 
                status = 1;
            }
            li.children("ul").slideToggle('fast');
            setTimeout(change_node, 500, id, status); 
        }
        
    });
    
    function change_node(id,status){
        $.ajax({
            url: '/ajax/change_node/'+id+'/'+status
        });
    }
    
});
// ]]>